home *** CD-ROM | disk | FTP | other *** search
/ Trusted Irix /B 4.0.4 / Trusted-Irix B-4.0.1.iso / dist / eoe1.idb / usr / include / sys / gm.h.z / gm.h
C/C++ Source or Header  |  1992-04-03  |  6KB  |  196 lines

  1. #ifndef __SYS_GM_H__
  2. #define __SYS_GM_H__
  3.  
  4. /**************************************************************************
  5.  *                                      *
  6.  *          Copyright (C) 1989, Silicon Graphics, Inc.          *
  7.  *                                      *
  8.  *  These coded instructions, statements, and computer programs  contain  *
  9.  *  unpublished  proprietary  information of Silicon Graphics, Inc., and  *
  10.  *  are protected by Federal copyright law.  They  may  not be disclosed  *
  11.  *  to  third  parties  or copied or duplicated in any form, in whole or  *
  12.  *  in part, without the prior written consent of Silicon Graphics, Inc.  *
  13.  *                                      *
  14.  **************************************************************************/
  15.  
  16. #ident "$Revision: 3.45 $"
  17.  
  18. /*
  19.  * Status structure for GM and pipe
  20.  */
  21. typedef struct gm_status_s {
  22.  
  23. /* board level status */
  24.     int gms_flag;        /* bit flags */
  25.  
  26. /* I/O addresses (VME addresses expressed in K1SEG form) */
  27. #if defined(IP5) || defined(IP17)
  28.     caddr_t gms_trig_addr;    /* Trigger for 3-way transfer */
  29.     caddr_t gms_tagram_addr;/* MP address of tag SRAM */
  30. #endif
  31.     caddr_t gms_dram_base;    /* Base of GM DRAM (a32 space) */
  32.     caddr_t gms_pipe_base;    /* Base of the FIFO (a32 space) */
  33.     gm_ioreg_t gms_iobase;    /* GM i/o registers (a16 space) */
  34.     host_to_gm_comm_t *gms_hostcomm_p; /* pointers to comm areas in DRAM */
  35.     gm_to_host_comm_t *gms_gmcomm_p;
  36.     gm_shared_t *gms_shared_p;
  37.     unchar gms_vme_vec;    /* VME interrupt vector for GM */
  38.  
  39.     int gms_pflag;        /* status flags for the pipe */
  40.     int gms_cxid;        /* active context id in pipe */
  41.  
  42.     caddr_t gms_recvp;    /* kernel address for GM command response */
  43.     int gms_recvlen;    /* length of response buffer */
  44.     int gms_error;        /* set if GM command fails in some way */
  45.  
  46.     sema_t gms_wait;    /* semaphore for GM command acknowledge */
  47.     sema_t gms_abort;    /* semaphore for GM abort command acknowledge */
  48.     lock_t gms_lock;    /* lock to protect gm_status */
  49. #if defined(IP5) || defined(IP17)
  50.     sema_t gms_gmcmd;    /* to provide exclusive use for GM cmds */
  51.     sema_t gms_dmawait;    /* for suspending process waiting for dma */
  52.     int gms_xferlen;    /* length in bytes transferred */
  53. #endif /* IP5 */
  54.  
  55.     int gms_accumcount;    /* number of accumulation buffer users */
  56. } gm_status_t;
  57.  
  58. extern gm_status_t gm_status;
  59.  
  60. /*
  61.  * Values for gm_status_t.gms_flag
  62.  */
  63. #define GM_INITIALIZED        0x0001    /* board initialized */
  64. #define GM_WINMGR        0x0002    /* window manager present */
  65. #define GM_WAITACK        0x0004    /* process waiting for ACK */
  66. #define GM_RESPONSE        0x0008    /* GM response contained data */
  67. #define GM_DEAD            0x0010    /* the GM has timed out */
  68. #define GM_DMA_INUSE        0x0020    /* pixel buffer dma in progress */
  69. #define GM_DMA_WAIT        0x0040    /* waiting for dma */
  70. #define GM_DMA_WANT        0x0080    /* some process wants to do dma */
  71. #define GM_DMA_ERR        0x0100    /* error on current dma */
  72. #define GM_DIAG_BUSY        0x0200    /* diag channel cmd in progress */
  73.  
  74. /*
  75.  * Values for gm_status_t.gms_pflag
  76.  */
  77. #define GM_PIPE_HOST        0x0001    /* the host can write to the FIFO */
  78. #define GM_PIPE_SWITCHING    0x0002    /* context switch in progress */
  79. #define GM_PIPE_SWITCHED    0x0004    /* context switch complete */
  80.  
  81. /*
  82.  * Values for p_graph.g_mapmode
  83.  */
  84. #define    GM_MODE_GRAPH        0    /* loaded context is for graphics */
  85. #define    GM_MODE_VECTOR        1    /* loaded context is for vector lib */
  86.  
  87. /*
  88.  * Comm area pointers
  89.  */
  90. #define HOST_TO_GM_COMM_P    (&(((struct gm_dram_s *)(gm_status.gms_dram_base))->host_to_gm_comm))
  91. #define GM_TO_HOST_COMM_P    (&(((struct gm_dram_s *)(gm_status.gms_dram_base))->gm_to_host_comm))
  92. #define GM_SHARED_P    (&(((struct gm_dram_s *)(gm_status.gms_dram_base))->gm_shared_data))
  93.  
  94. /*
  95. || Data structure corresponding to a graphics context on the GM board
  96. */
  97. typedef struct gm_context_s {
  98.     unchar        cx_flag;    /* state flags */
  99.     struct graph_s    *cx_graph;    /* graphics info struct */
  100.     int        cx_feedcount;    /* feedback chars copied to userbuf */
  101.     caddr_t        cx_feedbackp;    /* kernel address of feedback region */ 
  102.     caddr_t        cx_storebuf;    /* kernel address of unload buffer */
  103.     int        cx_storebuflen;    /* length of unload buffer */
  104.     int        cx_storecount;    /* unload buffer count copied back */
  105.     int        cx_waiters;    /* counter of suspended procs */
  106.     sema_t        cx_wait;    /* semaphore to suspend procs */
  107.     caddr_t        cx_texshadow;    /* pointer to texture shadow struct */
  108.     caddr_t        cx_texmap;    /* user addr of current texture map */
  109.     long        cx_npixels;    /* number of pixels in texture map */
  110.     long        cx_texcompress; /* texture map is in compressed format*/
  111.     int        cx_screen;    /* screen number associated with cxt */
  112.     int        cx_accumbuffer;    /* context is using accumulation buf */
  113.     lock_t        cx_lock;    /* spinlock to protect this entry */
  114. } gm_context_t;
  115.  
  116. extern gm_context_t gm_context[];
  117.  
  118. /*
  119.  * Values for gm_context_t.cx_flag
  120.  */
  121. #define    GM_CX_SWAP_PENDING    0x0001    /* swap buffers pending */
  122. #define    GM_CX_PICKING        0x0002    /* pick/select in progress */
  123. #define    GM_CX_FEEDBACK        0x0004    /* feedback operation in progress */
  124. #define    GM_CX_UNLOAD        0x0008    /* context unload in progress */
  125. #define    GM_CX_OVERFLOW        0x0010    /* pick/select buffer too small */
  126. #define    GM_CX_NOTAKE        0x0020    /* not eligible for TAKECX */
  127.  
  128. /*
  129.  * Structure to remember locked memory
  130.  */
  131. typedef struct gm_lockmap_s {
  132.     caddr_t            buffer;    /* user address */
  133.     int            buflen;    /* length */
  134.     struct gm_lockmap_s    *next;    /* linked list pointer */
  135. } gm_lockmap_t;
  136.  
  137. extern gr_out_t gm_funcs;
  138. extern int store_cx_buf[4096];
  139.  
  140. /*
  141.  * Macros
  142.  */
  143. #if defined(IP5) || defined(IP17)
  144.  
  145. #define SPLGM        spl5    /* this actually sets spl4 */
  146.  
  147. #else IP4
  148.  
  149. #define SPLGM        splvme
  150. #define GM_UNLOAD_AREA    (statp->gms_dram_base + GM_UNLOAD_OFFSET)
  151.  
  152. #endif
  153.  
  154. #ifndef MIN
  155. #define MIN(x, y)    (((x) < (y)) ? (x) : (y))
  156. #endif
  157.  
  158. /* OP argument to gm_rectop */
  159.  
  160. #define PIXREAD        0
  161. #define PIXWRITE    1
  162.  
  163. /*
  164.  * GM-dependent function pointers
  165.  */
  166. typedef struct gm_out_s {
  167.     int  (*gm_sgigsc)();
  168.     int  (*gm_wmsgigsc)();
  169.     int  (*gm_switch_cx)();
  170.     void (*gm_cmd)();
  171.     void (*gm_dma_pixels)();
  172.     void (*gm_texcleanup)();
  173. } gm_out_t;
  174.  
  175. extern gm_out_t *gm_out_p;
  176.  
  177. /*
  178.  * Prototypes for exported functions in gm.c
  179.  */
  180. int  gm_common_init(struct edt *, int);
  181. int  gm_get_comm(gm_status_t *);
  182. void gm_send_cmd(gm_status_t *, int);
  183. void gm_unmapreg(struct graph_s *);
  184. void gm_invaltlb(struct proc *);
  185. void gm_cx_sleep(gm_context_t *, int);
  186. void gm_cx_wakeup(gm_context_t *);
  187. void gm_dma_lock(gm_status_t *, struct graph_s *);
  188. void gm_dma_unlock(gm_status_t *);
  189. int  gm_cx_check(struct proc *, int);
  190. void gm_error(gm_status_t *);
  191. int  gm_output_str(caddr_t, int);
  192. gm_status_t *gm_get_statp();
  193. gm_context_t *gm_get_contextp();
  194.  
  195. #endif /* __SYS_GM_H__ */
  196.